package com.knife.common.tree.builder;


import com.knife.common.tree.dto.KnifeTree;

import java.util.List;

/**
 * Created with IntelliJ IDEA.
 *
 * @author： 76875
 * @date： 2022/6/6 星期一 17:35
 * @description：
 * @modifiedBy：
 * @version: 1.0
 */
public interface KnifeTreeBuilder<E, Tree extends KnifeTree> {

    /**
     * 适合多个根节点的树构造
     *
     * @param dataList 源数据
     * @return 数据
     * @throws IllegalAccessException 非法参数访问异常
     */
    List<Tree> buildMultiRootTree(List<E> dataList) throws IllegalAccessException;


    /**
     * 指定根节点值获取根节点构造树
     *
     * @param dataList 源数据
     * @param rootValue 根节点值
     * @return 数据
     * @throws IllegalAccessException 非法参数访问异常
     */
    <V> List<Tree> buildMultiRootTree(List<E> dataList,V rootValue) throws IllegalAccessException;

    /**
     * 适合单个根节点的树构造
     *
     * @param dataList  源数据
     * @param rootValue 根节点的值
     * @return 数据
     * @throws IllegalAccessException 非法参数访问异常
     */
    <RootValue> Tree buildSingleRootTree(List<E> dataList, RootValue rootValue) throws IllegalAccessException;


    /**
     * 适合单个根节点的树构造
     *
     * @param dataList  源数据
     * @return 数据
     * @throws IllegalAccessException 非法参数访问异常
     */
    Tree buildSingleRootTree(List<E> dataList) throws IllegalAccessException;
}
